package com.jm.day24.b_dbutilstx;


import com.jm.day24.utils.JdbcUtils;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

import java.sql.Connection;

public class DbUtilsTxDemo {




        /**
         * 使用DBUtils进行事务管理
         */
        @Test
        public void demo() {
            //创建QueryRunner对象，用来执行sql语句，不需要传连接池进去
            QueryRunner runner = new QueryRunner();

            Connection conn = null;
            System.out.println(12);
            try {
                //获取一个连接，开启事务
                conn = JdbcUtils.getConnection();
                conn.setAutoCommit(false);

                //执行sql语句， 把开启了事务的连接对象传递给runner对象，供runner对象执行sql语句使用
                int update = runner.update(conn, "update account set money = money -? where username = ?", 500d, "zhangsan");

                //处理执行结果
                System.out.println(update);

                //手动创建一个异常:如果没有这个异常，代码正常执行，事务会正常提交；如果有这个异常，将会跳到catch块里进行事务回滚
               // int i = 1 / 0;

                //关闭事务：提交事务
                DbUtils.commitAndCloseQuietly(conn);
            } catch (Exception e) {
                System.out.println("出现异常，事务回滚");
                //关闭事务：回滚事务
                DbUtils.rollbackAndCloseQuietly(conn);
            }
        }


    }
